﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using RegraNegocio;
using Model;

namespace PedidoWeb.Telas
{
    public partial class Categoria : System.Web.UI.Page
    {
        private Model.Categoria categoria = null;

        protected void Page_Load(object sender, EventArgs e)
        {
            habilitaCampo("0");
        }

        private void preencheGrid(Model.Categoria categoria)
        {
            try
            {
                List<Model.Categoria> categoriasRecuperadas = CategoriaBO.getInstance().recuperarCategorias(categoria);

                dtgResultado.DataSource = categoriasRecuperadas;
                dtgResultado.DataBind();

                dtgResultado.Visible = true;

                return;
            }
            catch (Exception cause)
            {
                dtgResultado.DataSource = null;
                dtgResultado.Visible = false;
                lblException.Text = (cause.Message);
            }
        }

        private void limpacampo()
        {
            txtCodigo.Text = "";
            txtDescricao.Text = "";
            txtNome.Text = "";
        }

        private void limpaMensagem()
        {
            lblException.Text = "";
        }

        private void habilitaCampo(String cmbAcao)
        {
            if (cmbAcao.Equals("0"))            
            {
                txtCodigo.Enabled = false;
                txtDescricao.Enabled = true;
                txtNome.Enabled = true;
            }
            else if(cmbAcao.Equals("1"))
            {
                txtCodigo.Enabled = true;
                txtDescricao.Enabled = false;
                txtNome.Enabled = true;
            }
            else if (cmbAcao.Equals("2"))
            {
                txtCodigo.Enabled = true;
                txtDescricao.Enabled = true;
                txtNome.Enabled = true;
            }
            else
            {
                txtCodigo.Enabled = true;
                txtDescricao.Enabled = false;
                txtNome.Enabled = false;
            }
        }

        private bool validador()
        {
            int number;
            if (Int32.TryParse(txtDescricao.Text, out number))
            {
                lblException.Text = "Descrição não pode ser números";
                lblException.Font.Bold = true;
                return false;
            }
            else if (Int32.TryParse(txtNome.Text, out number))
            {
                lblException.Text = "Nome não pode ser números";
                lblException.Font.Bold = true;
                return false;
            }
            else
            {
                return true;
            }
        }

        protected void btnAcao_Click(object sender, EventArgs e)
        {

            try
            {
                categoria = new Model.Categoria();

                if (cmbAcao.SelectedIndex.Equals(0))
                {
                    if (!validador())
                    {
                        return;
                    }
                    categoria.Nome = txtNome.Text;
                    categoria.Descricao = txtDescricao.Text;

                    CategoriaBO.getInstance().gravar(categoria);
                    limpacampo();
                    habilitaCampo("0");
                    lblException.Text = ("Sucesso Inclusão");
                    lblException.Font.Bold = true;
                }

                else if (cmbAcao.SelectedIndex.Equals(1))
                {

                    if (txtCodigo.Text.Equals(""))
                    {
                        categoria.Codigo = 0;
                    }
                    if (txtNome.Text.Equals("") && txtCodigo.Text.Equals(""))
                    {
                        lblException.Text = "Preencha Nome ou Código para busca";
                        lblException.Font.Bold = true;
                        return;
                    }
                    else
                    {
                        categoria.Codigo = Int32.Parse(txtCodigo.Text);
                    }

                    limpacampo();
                    habilitaCampo("1");
                    preencheGrid(categoria);
                }

                else if (cmbAcao.SelectedIndex.Equals(2))
                {
                    if (!validador())
                    {
                        return;
                    }
                    categoria.Codigo = Int32.Parse(txtCodigo.Text);
                    categoria.Nome = txtNome.Text;
                    categoria.Descricao = txtDescricao.Text;


                    CategoriaBO.getInstance().alterar(categoria);
                    limpacampo();
                    habilitaCampo("2");
                    lblException.Text = "Sucesso alteração";
                    lblException.Font.Bold = true;
                }

                else if (cmbAcao.SelectedIndex.Equals(3))
                {

                    if (txtCodigo.Text.Equals(""))
                    {
                        lblException.Text = "Digite um código";
                        lblException.Font.Bold = true;
                        return;
                    }

                    categoria.Codigo = Int32.Parse(txtCodigo.Text);
                    if (CategoriaBO.getInstance().excluir(categoria))
                    {

                        cmbAcao.SelectedIndex = 3;

                        preencheGrid(categoria);
                        limpacampo();
                        habilitaCampo("3");
                        lblException.Text = "Sucesso exclusão";
                        lblException.Font.Bold = true;
                    }
                    else
                    {
                        lblException.Text = ("Erro na exclusão da Categoria.");
                    }
                }
            }
            catch (Exception ec)
            {
                lblException.Text = ec.ToString();
            }

        }

        protected void cmbAcao_SelectedIndexChanged(object sender, EventArgs e)
        {
            limpaMensagem();
            habilitaCampo(cmbAcao.SelectedValue);
        }

    }
}